- Notifications
You must be signed in to change notification settings - Fork 5.8k
/
Copy path924. Minimize Malware Spread.go
52 lines (49 loc) · 1 KB
/
924. Minimize Malware Spread.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package leetcode
import (
"math"
"github.com/halfrost/LeetCode-Go/template"
)
funcminMalwareSpread(graph [][]int, initial []int) int {
iflen(initial) ==0 {
return0
}
uf, maxLen, maxIdx, uniqInitials, compMap:= template.UnionFindCount{}, math.MinInt32, -1, map[int]int{}, map[int][]int{}
uf.Init(len(graph))
fori:=rangegraph {
forj:=i+1; j<len(graph); j++ {
ifgraph[i][j] ==1 {
uf.Union(i, j)
}
}
}
for_, i:=rangeinitial {
compMap[uf.Find(i)] =append(compMap[uf.Find(i)], i)
}
for_, v:=rangecompMap {
iflen(v) ==1 {
uniqInitials[v[0]] =v[0]
}
}
iflen(uniqInitials) ==0 {
smallestIdx:=initial[0]
for_, i:=rangeinitial {
ifi<smallestIdx {
smallestIdx=i
}
}
returnsmallestIdx
}
for_, i:=rangeinitial {
if_, ok:=uniqInitials[i]; ok {
size:=uf.Count()[uf.Find(i)]
ifmaxLen<size {
maxLen, maxIdx=size, i
} elseifmaxLen==size {
ifi<maxIdx {
maxIdx=i
}
}
}
}
returnmaxIdx
}